package u1;

import static java.lang.System.*;
import static u1.Util.*;

import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLStreamException;

import org.xml.sax.SAXException;

/**
 * Takes uncompressed enwiki XML dump on stdin and prints pages with titles in a
 * given file. The output format is compatible with the PageReader, but it is
 * not identically the same as the wiki dump. The output is not compressed.
 */
public class PullPages extends PagePuller {
  private Set<String> titles;

  public PullPages(Set<String> titles) throws SAXException, XMLStreamException {
    super(out, "movies", new HashMap<String, String>());
    this.titles = titles;
  }

  public static void main(final String[] argv) throws SAXException,
      IOException, XMLStreamException, FactoryConfigurationError {
    if (argv.length != 1) {
      err.println("USAGE: titleFile");
      exit(-1);
    }

    final String titleFile = argv[0];
    Set<String> titles = new HashSet<String>();

    try {
      FileReader input = new FileReader(titleFile);
      BufferedReader bufRead = new BufferedReader(input);

      String line; // String that holds current file line
      line = bufRead.readLine();

      while (line != null) {
        line = canonicalizeLink(line);
        titles.add(line);
        line = bufRead.readLine();
      }

      bufRead.close();
    } catch (IOException e) {
      System.out.println("Error reading in title files");
      e.printStackTrace();
    }
    trace("Read %d unique titles from %s", titles.size(), titleFile);

    PullPages puller = new PullPages(titles);
    puller.parse(in);
  }

  @Override
  protected boolean pull(String title, String text) {
    return titles.contains(title);
  }
}
/*
* Copyright (c) 2009 John Lees-Miller
* 
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
* 
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/

